/*
 * @Author: your name
 * @Date: 2021-09-22 09:26:59
 * @LastEditTime: 2021-09-22 15:38:08
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \数据结构\队列\链表队列\queue.h
 */

/*
1.front == rear 空
2.不存在满的情况
3.出队需要释放空间
4.front 无数据 rear有数据,这样才能保证在rear插入数据
*/
#ifndef _QUEUE_H_
#define _QUEUE_H_

typedef int QElemType;

typedef struct Node
{
    QElemType value;
    struct Node* next;
}QNode,*QNodePtr;

typedef struct queue
{
    QNodePtr front;
    QNodePtr rear;
}QUEUE;

//建立空队列
QUEUE* createQueue();
//释放队列
bool freeQueue(QUEUE* q);
//判空
bool isEmpty(QUEUE* q);
//入队
void EnQueue(QUEUE* q, QElemType elem);
//出队
QElemType DeQueue(QUEUE* q);
//清空队列
void clearQueue(QUEUE* q);
//获取队列长度
int QueueLength(const QUEUE* q);
#endif